package com.zpark.oop.day05;

import org.junit.Test;

/**
 * static和final关键字：
 *      static：
 *          用static修饰的成员变量不属于对象的数据结构，属于类的数据结构
 *          static变量是属于类的变量，通常可以通过类名来引用static成员。
 *          static成员变量和类的信息一起存储在方法区，而不是在堆中，一个类的static变量只有一
 *              份，无论这个类创建了多少个对象
 */
public class Emp {

    /*
        静态块：
            静态块的语法：
                static {
                    // 通常用于初始化静态数据结构，例如：初始化静态变量的值
                }
     */
    static {
        System.out.println("静态块执行了");
    }

    // 实例变量（非静态变量）
    String uname;

    // 类变量（静态变量）
    static String name;

    /**
     * static修饰方法：则方法为静态方法（类的方法），调用的时候直接使用类名进行调用
     * static在调用时没有具体的对象，因此在static方法中不能对非static成员进行访问，static方法
     * 的作用在于提供一些“工具方法”和“工厂方法”等。
     */
    public static int test00(){
        name = "test00";
        return 1;
    }

    @Test
    public void test01(){
        // 创建Emp对象
        Emp e1 = new Emp();
        Emp e2 = new Emp();

        e1.uname = "张三";
        e2.uname = "李四";

        // 通过对象给name属性赋值
        e1.name = "张三";
        //System.out.println(Emp.name);
        //e2.name = "李四";
        System.out.println(e2.name);
    }
}
